home *** CD-ROM | disk | FTP | other *** search
/ bioinformatics.org / bioinformatics.org_software.tar / www.bioinformatics.org / download / ecell2 / ecell220setup.exe / {app} / standard / SRCJ / MainWindow.java < prev    next >
Text File  |  2002-07-31  |  29KB  |  1,076 lines

  1. /**
  2.  * title:     MainWindow class (MainWindow.java)<p>
  3.  * description  : Controller Panel class <p>
  4.  * Copyright (C) 1996-2001 Keio University <p>
  5.  * Copyright (C) 1998-2001 Japan Science and Technology Corporation (JST)<p>
  6.  *               GNU General Public Licence <p>
  7.  * Division:     Mitui Knowledge Industry Co. Ltd. Bioscience division <p>
  8.  * Version :     $Id: MainWindow.java,v 1.8 2002/05/13 00:23:04 ota Exp $ <p>
  9.  */
  10.  
  11.  
  12. package ecell;
  13.  
  14. import java.awt.*;
  15. import java.awt.event.*;
  16. import javax.swing.border.*;
  17. import javax.swing.*;
  18. import javax.swing.plaf.basic.*;
  19. import java.util.Vector;
  20. import java.util.Enumeration;
  21. import java.io.*;
  22.  
  23. /**
  24.  * Starting-up class 
  25.  * @author:         XD.Zheng
  26.  * @version: 1.0
  27.  * @since JDK1.2.2
  28.  */
  29.  
  30. public class MainWindow extends JFrame implements ActionListener,Runnable {
  31.  
  32.  
  33.  
  34.     JPanel contentPane;
  35.     JPanel jp1 = new JPanel();
  36.     JPanel jp2 = new JPanel();
  37.     JPanel jp3 = new JPanel();
  38.     JPanel jp4 = new JPanel();
  39.     JPanel jp5 = new JPanel();
  40.     JLabel jlRule = new JLabel();
  41.     // 2002.5
  42.     JLabel jlScript = new JLabel();
  43.     JLabel jlElapsed = new JLabel();
  44.     JLabel jlTime = new JLabel("",2);
  45.  
  46.     JMenuBar menuBar1 = new JMenuBar();
  47.     JMenu menuFile = new JMenu("File");
  48.     JMenu menuInterface = new JMenu("New Interface");
  49.     JMenu menuWindow = new JMenu("Windows");
  50.     JMenu menuHelp = new JMenu("Help");
  51.     JButton buttonStart = new JButton("Start");
  52.     JButton buttonStop = new JButton("Stop");
  53.     JButton buttonStep = new JButton("Step");
  54.     JLabel labelImage = new JLabel(new ImageIcon("ecanim2.gif"));
  55.     JMenuItem itemFileExit = new JMenuItem("Quit");
  56.     JMenuItem itemLoadRule = new JMenuItem("Load Rule");
  57.     JMenuItem itemLoadScript = new JMenuItem("Load Script");
  58.     JMenuItem itemLoadState = new JMenuItem("Load Cell State");
  59.     JMenuItem itemSaveState = new JMenuItem("Save Cell State");
  60.     JMenuItem itemTracer = new JMenuItem("Tracer");
  61.     JMenuItem itemSubstance = new JMenuItem("SubstanceWindow");
  62.     JMenuItem itemReactor = new JMenuItem("ReactorWindow");
  63.     JMenuItem itemShowMessage = new JMenuItem("MessageWindow");
  64.     JMenuItem itemPreference = new JMenuItem("PreferenceWindow");
  65.     JMenuItem itemHelpAbout = new JMenuItem("Version  Information");
  66.     BorderLayout borderLayout1 = new BorderLayout();
  67.     Border border1;
  68.     Border border2;
  69.     Border border3;
  70.     Border border4;
  71.  
  72.     /**
  73.      * Thread for looping calculation 
  74.      */
  75.     private volatile Thread coreThread;
  76.  
  77.     /**
  78.      * Instance of messageWindow window
  79.      */
  80.     Message messageWindow = new Message();
  81.  
  82.     /**
  83.      * Class to communicate with JNI
  84.      */
  85.     DataField df = new DataField(this);
  86.  
  87.     /**
  88.      * Display time at first.
  89.      */
  90.     int count =-1;
  91.  
  92.     /**
  93.      * Script is read or not? 
  94.      */
  95.     // 2001.12.25 for ECELL2.2
  96.     //int scriptFlag=0;
  97.     boolean scriptFlag = false;
  98.  
  99.     /**
  100.      * Flag indicating whether the rule file has been read or not, 0 "Not yet" 1 "Already read"
  101.      */
  102.     // 2001.12.25 for ECELL2.2
  103.     //int ruleFlag=0;
  104.     boolean ruleFlag = false;
  105.  
  106.     /**
  107.      * Tracer Number
  108.      */
  109.     int tracerNumber =0;
  110.  
  111.     /**
  112.      * 2001.10.22 stop running flag : true "stop requested"
  113.      */
  114.     private boolean bStopAction = false;
  115.  
  116.     /**
  117.      * 2002.4 caluclation running status
  118.      */
  119.     private boolean bRunning = false;
  120.  
  121.     /**
  122.      * Vector Storing all of Tracer windows
  123.      */
  124.     //Vector vTracer = new Vector();
  125.  
  126.     /**
  127.      * Vector Storing all of Substance windows
  128.      */
  129.     //Vector vSubstance = new Vector();
  130.  
  131.     /**
  132.      * Vector Storing all of Reactor windows
  133.      */
  134.     //Vector vReactor = new Vector();
  135.  
  136.     /**
  137.      * Concerining a state of EntrySelector, it is always true currently. 
  138.      */
  139.     boolean selectorFlag=false;
  140.  
  141.     /**
  142.      * EntrySelector
  143.      */
  144.     EntrySelector selector= null;
  145.  
  146.     private Vector listeners = new Vector();
  147.     
  148.     
  149.     /**
  150.      * Engine
  151.      */
  152.     public Engine engine = null;
  153.  
  154.     /**
  155.      * Constructor
  156.      */
  157.     //public MainWindow() {
  158.     public void initClass()
  159.     {
  160.         enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  161.  
  162.         jbInit();
  163.  
  164.         // 2001.12.25 for ECELL2.2
  165.         if( this.engine == null )
  166.         {
  167.             this.engine = new Engine( this );
  168.         }
  169.         
  170.     }
  171.  
  172.     /**
  173.      * Initialization of components 
  174.      * @return void
  175.      */
  176.     private void jbInit()/* throws Exception  */{
  177.  
  178.         messageWindow.setVisible(false);
  179.         contentPane = (JPanel) this.getContentPane();
  180.         border1 = BorderFactory.createEtchedBorder(Color.white,new Color(142, 142, 142));
  181.         border2 = BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.white,Color.white,new Color(142, 142, 142),new Color(99, 99, 99));
  182.         border3 = BorderFactory.createLineBorder(SystemColor.controlText,1);
  183.         border4 = BorderFactory.createBevelBorder(BevelBorder.RAISED,Color.white,Color.white,new Color(142, 142, 142),new Color(99, 99, 99));
  184.         contentPane.setLayout(borderLayout1);
  185.         this.setSize(new Dimension(535, 160));
  186.         this.setTitle("E-Cell Control Panel");
  187.         this.setResizable(true);
  188.         buttonStop.setEnabled(false);
  189.  
  190.         itemFileExit.addActionListener(this);
  191.         itemHelpAbout.addActionListener(this);
  192.         itemShowMessage.addActionListener(this);
  193.         itemTracer.addActionListener(this);
  194.         itemLoadRule.addActionListener(this);
  195.         itemLoadScript.addActionListener(this);
  196.         itemLoadState.addActionListener(this);
  197.         itemSaveState.addActionListener(this);
  198.         itemSubstance.addActionListener(this);
  199.         itemReactor.addActionListener(this);
  200.  
  201.         jlTime.setBorder(border2);
  202.         jlTime.setPreferredSize(new Dimension(100,30));
  203.         labelImage.setBorder(border4);
  204.         menuFile.add(itemLoadRule);
  205.         menuFile.add(itemLoadScript);
  206.         menuFile.add(itemLoadState);
  207.         menuFile.add(itemSaveState);
  208.         menuFile.add(itemFileExit);
  209.         
  210.         menuInterface.add(itemTracer);
  211.         menuInterface.add(itemSubstance);
  212.         menuInterface.add(itemReactor);
  213.         menuWindow.add(itemShowMessage);
  214.         menuWindow.add(itemPreference);
  215.         menuHelp.add(itemHelpAbout);
  216.  
  217.         menuBar1.add(menuFile);
  218.         menuBar1.add(menuInterface);
  219.         menuBar1.add(menuWindow);
  220.         menuBar1.add(menuHelp);
  221.         this.setJMenuBar(menuBar1);
  222.  
  223.         jlRule.setText("Rule:");
  224.         jp1.setLayout(new FlowLayout(0,5,3));
  225.         jp1.add(jlRule);
  226.         
  227.         // 2002.5
  228.         jlScript.setText( "" );
  229.         jp1.add( jlScript );
  230.  
  231.         jp2.setLayout(new FlowLayout(0,5,3));
  232.         jp2.setBorder(border1);
  233.         jlElapsed.setText("Elapsed Time[s]:");
  234.         jlTime.setText("    0");
  235.  
  236.         jp3.setLayout(new BorderLayout());
  237.         jp3.add(jp1,"North");
  238.         jp3.add(jp5, BorderLayout.CENTER);
  239.         jp5.add(jp2, null);
  240.         jp2.add(jlElapsed);
  241.         jp2.add(jlTime);
  242.         jp2.add(buttonStart);
  243.         jp2.add(buttonStop);
  244.         jp2.add(buttonStep);
  245.         contentPane.add(jp3,"Center");
  246.         itemPreference.addActionListener(this);
  247.         buttonStart.addActionListener(this);
  248.         buttonStop.addActionListener(this);
  249.         buttonStep.addActionListener(this);
  250.         jp4.add(labelImage);
  251.         contentPane.add(jp4,"East");
  252.  
  253.         // 2002.1.16
  254.         this.setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE );
  255.     }
  256.  
  257.     /**
  258.      * Starting up of Thread 
  259.      * @return void
  260.      */
  261.      void startAction(){
  262. engine.debugFunc( "-----> startAction@" + getClass().getName() + "()" );
  263.         coreThread = new Thread(this);
  264.         coreThread.start();
  265.  
  266.         itemFileExit.setEnabled(false);
  267.         itemLoadRule.setEnabled(false);
  268.         itemLoadScript.setEnabled(false);
  269.         itemLoadState.setEnabled(false);
  270.         itemSaveState.setEnabled(false);
  271.         itemTracer.setEnabled(false);
  272.         itemSubstance.setEnabled(false);
  273.         itemReactor.setEnabled(false);
  274.         itemPreference.setEnabled(false);
  275.         buttonStart.setEnabled(false);
  276.  
  277.         buttonStop.setEnabled(true);
  278.         buttonStep.setEnabled(false);
  279.         
  280.         setTracerSaveButtonState( false );
  281.  
  282.  
  283. engine.debugFunc( "<----- startAction@" + getClass().getName() + "()" );
  284.      }
  285.  
  286.     /**
  287.      * display rule file name
  288.      */
  289.     private void setRuleFileName()
  290.     {
  291.         StringBuffer buf = new StringBuffer( "Rule : " );
  292.         if( ruleFlag )
  293.         {
  294.             String fname = new String( engine.getRuleName() );
  295.             int index = fname.lastIndexOf( File.separator );
  296.             if( index > 0 )
  297.             {
  298.                 fname = fname.substring( index + 1 );
  299.             }
  300.             buf.append( fname );
  301.             buf.append( "  " );
  302.         }
  303.         jlRule.setText( buf.toString() );
  304.         
  305.     }
  306.  
  307.     public void setScriptFileName( String name )
  308.     {
  309.         String filename = "";
  310.         
  311.         if( !name.equals( "" ) )
  312.         {
  313.             String fname = new String( name );
  314.             int index = fname.lastIndexOf( File.separator );
  315.             if( index > 0 )
  316.             {
  317.                 fname = fname.substring( index + 1 );
  318.             }
  319.             filename = "  Script : " + fname;
  320.         }
  321.         jlScript.setText( filename );
  322.     }
  323.  
  324.     /**
  325.      * Inform when reading of Script is finished. 
  326.      * @return void
  327.      */
  328.      void setScriptFlag(){
  329.         scriptFlag=true;
  330.         if(!ruleFlag) setState1();
  331.         if(ruleFlag) setState2();
  332.      }
  333.  
  334.     /**
  335.      * Inform when reading of Script is finished. 
  336.      * @param flag boolean 
  337.      * @param ruuning_status boolean engine running or not
  338.      * @return void
  339.      */
  340.      void setScriptFlag( boolean flag, boolean running_status )
  341.      {
  342. engine.debugFunc( "-----> setScriptFlag(flag:" + flag + ", status:" + running_status + ")@" + getClass().getName() );
  343.         scriptFlag=flag;
  344.         if( flag && !running_status )
  345.         {
  346.             if(!ruleFlag) setState1();
  347.             if(ruleFlag) setState2();
  348.         }
  349. engine.debugFunc( "<----- setScriptFlag@" + getClass().getName() );
  350.      }
  351.  
  352.     /**
  353.      * State in which the rule file cannot be open 
  354.      * @return void
  355.      */
  356.      void setState1(){
  357. engine.debugFunc( "-----> setState1@" + getClass().getName() + "()" );
  358.         itemFileExit.setEnabled(true);
  359.         itemLoadRule.setEnabled(true);
  360.         itemLoadScript.setEnabled(true);
  361.         itemLoadState.setEnabled(false);
  362.         itemSaveState.setEnabled(false);
  363.         itemTracer.setEnabled(false);
  364.         itemSubstance.setEnabled(false);
  365.         itemReactor.setEnabled(false);
  366.         itemShowMessage.setEnabled(true);
  367.         itemPreference.setEnabled(false);
  368.         itemHelpAbout.setEnabled(true);
  369.  
  370.          buttonStart.setEnabled(false);
  371.  
  372.          buttonStop.setEnabled(false);
  373.          buttonStep.setEnabled(false);
  374.  
  375.         setTracerSaveButtonState( false );
  376.  
  377. engine.debugFunc( "<----- setState1@" + getClass().getName() + "()" );
  378.      }
  379.  
  380.     /**
  381.      * State in which the rule file can be open 
  382.      * @return void
  383.      */
  384.  
  385.      void setState2(){
  386. engine.debugFunc( "-----> setState2@" + getClass().getName() + "()" );
  387.         itemFileExit.setEnabled(true);
  388.         itemLoadRule.setEnabled(false);
  389.         itemLoadScript.setEnabled(true);
  390.         itemLoadState.setEnabled(true);
  391.         itemSaveState.setEnabled(true);
  392.         itemTracer.setEnabled(true);
  393.         itemSubstance.setEnabled(true);
  394.         itemReactor.setEnabled(true);
  395.         itemShowMessage.setEnabled(true);
  396.         itemPreference.setEnabled(true);
  397.         itemHelpAbout.setEnabled(true);
  398.  
  399.          buttonStart.setEnabled(true);
  400.  
  401.          buttonStop.setEnabled(false);
  402.          buttonStep.setEnabled(true);
  403.  
  404.         setTracerSaveButtonState( true );
  405.  
  406. engine.debugFunc( "<----- setState2@" + getClass().getName() + "()" );
  407.      }
  408.  
  409.  
  410.     /**
  411.      * Stop Thred.
  412.      * @return void
  413.      */
  414.      void stopAction(){
  415. engine.debugFunc( "-----> stopAction@" + getClass().getName() + "()" );
  416.         // 2001.12.25 for ECELL2.2
  417.         //df.setMainWindowState(1);
  418.         engine.setMainWindowState( 1 );
  419.         
  420.         coreThread=null;
  421.  
  422. engine.debugFunc( "------ scriptFlag:" + scriptFlag + "/ruleFlag:" + ruleFlag );
  423.  
  424.         itemFileExit.setEnabled(true);
  425.         itemLoadRule.setEnabled(false);
  426.         if (scriptFlag)
  427.         itemLoadScript.setEnabled(true);
  428.         itemLoadState.setEnabled(true);
  429.         itemSaveState.setEnabled(true);
  430.         itemTracer.setEnabled(true);
  431.         itemSubstance.setEnabled(true);
  432.         itemReactor.setEnabled(true);
  433.         itemPreference.setEnabled(true);
  434.  
  435.         buttonStart.setEnabled(true);
  436.         buttonStop.setEnabled(false);
  437.         buttonStep.setEnabled(true);
  438.  
  439.         // 2001.10.22
  440.         this.setStopActionFlag( false );
  441.  
  442.         setTracerSaveButtonState( true );
  443.  
  444. engine.debugFunc( "<----- stopAction@" + getClass().getName() + "()" );
  445.      }
  446.  
  447.  
  448.     private void setTracerSaveButtonState( boolean flag )
  449.     {
  450.         Vector lsnrs = (Vector)listeners.clone();
  451.         for( Enumeration enum = lsnrs.elements(); enum.hasMoreElements(); )
  452.         {
  453.             ECell2Interface interf = (ECell2Interface)enum.nextElement();
  454.             if( interf instanceof Tracer )
  455.             {
  456.                 ((Tracer)interf).buttonSave.setEnabled( flag );
  457.             }
  458.         }
  459.     }
  460.  
  461.     /**
  462.      * ActionPerformed
  463.      * @param e         ActionEvent  Event
  464.      * @return void
  465.      */
  466.     public void actionPerformed(ActionEvent e) {
  467.  
  468.         if(e.getSource()== buttonStart){
  469.             //df.setMainWindowState(0);
  470.             startAction();
  471.         }
  472.  
  473.         if(e.getSource()==buttonStop){
  474.             // 2002.3.19 akira shiozawa
  475.             if( engine.getScriptRunning() )
  476.             {
  477.                 engine.stopScript();
  478.             }
  479.             
  480.             stopAction();
  481.         }
  482.  
  483.         if(e.getSource()==buttonStep){
  484.             try{
  485.                 // 2001.12.25 for ECELL2.2
  486.                 //df.setMainWindowState(2);
  487.                 engine.setMainWindowState( 2 );
  488.                 
  489.                 // 2002.4 akira shiozawa
  490.                 fireClicked();
  491.                 
  492.                 double fTime = df.getTime();
  493.                 jlTime.setText("   "+ getDoubleValue(fTime));
  494.             }catch(Exception ex){
  495.                 messageWindow.setErrorMessage( ex );
  496.             }
  497.         }
  498.  
  499.         if(e.getSource()== itemFileExit){
  500.             fileExit_actionPerformed();
  501.         }
  502.  
  503.         if(e.getSource()== itemHelpAbout){
  504.             helpAbout_actionPerformed();
  505.             //messageWindow.setMessage("HelpAbout");
  506.         }
  507.  
  508.         if(e.getSource() == itemShowMessage){
  509.             //messageWindow.setMessage("ShowMessage");
  510.             messageWindow.setVisible(true);
  511.             messageWindow.show();
  512.         }
  513.  
  514.         if(e.getSource()== itemPreference){
  515.             Preference Preference =
  516.                 new Preference(this );
  517.             Preference.setSize( 220 , 100 );
  518.             Preference.setVisible(true);
  519.             Preference.setLocation(250,200);
  520.         }
  521.  
  522.         if(e.getSource() == itemTracer) {
  523.             Tracer tracer = new Tracer(this,tracerNumber);
  524.             try{
  525.                 df.setTracerState(tracerNumber,0);
  526.             }catch(Exception ex){
  527.                 messageWindow.setErrorMessage( ex );
  528.             }
  529.             tracerNumber ++;
  530.             //vTracer.addElement(tracer);
  531.             tracer.setVisible(true);
  532.             //tracer.setLocation(150,100);
  533.         }
  534.  
  535.         if(e.getSource() == itemLoadRule){
  536.             AnFileFilter filter = new AnFileFilter();
  537.  
  538.             filter.add("eri");
  539.             filter.setDescription("*.eri");
  540.             JFileChooser jFileChooser = new JFileChooser( (new File( "." )).getAbsolutePath() );
  541.             jFileChooser.setDialogTitle("File Selector");
  542.  
  543.             jFileChooser.setFileFilter(filter);
  544.  
  545.             jFileChooser.setMultiSelectionEnabled(false);
  546.  
  547.             int ans = jFileChooser.showOpenDialog(contentPane);
  548.             if(ans ==JFileChooser.APPROVE_OPTION){
  549.                 String filename =jFileChooser.getSelectedFile().getAbsolutePath();
  550.                 try{
  551.                     // 2001.12.25 for ECELL2.2
  552.                     //ruleFlag = df.setRuleFile(filename);
  553.                     engine.setRuleFile( filename );
  554.                     
  555.                     if(!ruleFlag) setState1();
  556.                     if(ruleFlag) setState2();
  557.                 }catch(Exception ex){
  558.                     messageWindow.setErrorMessage( ex );
  559.                 }
  560.             }
  561.         }
  562.  
  563.         if(e.getSource() == itemLoadScript){
  564.             AnFileFilter filter = new AnFileFilter();
  565.             filter.add("ecs");
  566.             filter.setDescription("*.ecs");
  567.             JFileChooser jFileChooser = new JFileChooser((new File( "." )).getAbsolutePath());
  568.             jFileChooser.setDialogTitle("File Selector");
  569.             jFileChooser.setFileFilter(filter);
  570.  
  571.             jFileChooser.setMultiSelectionEnabled(false);
  572.  
  573.             int ans = jFileChooser.showOpenDialog(null);
  574.  
  575.             if(ans ==JFileChooser.APPROVE_OPTION){
  576.                 String filename =jFileChooser.getSelectedFile().getAbsolutePath();
  577.                 try{
  578.                     scriptFlag=false;
  579.                     
  580.                     // 2001.12.25 for ECELL2.2
  581.                     //ruleFlag = df.setScriptFile(filename);
  582.                     engine.setScriptFile( filename );
  583.                     /*** 2002.1.8
  584.                     if(ruleFlag) {
  585.                         if(scriptFlag) setState2();
  586.                     }
  587.                     ***/
  588.                 }catch(Exception ex){
  589.                     messageWindow.setErrorMessage( ex );
  590.                 }
  591.             }
  592.         }
  593.  
  594.         if(e.getSource() == itemLoadState){
  595.             AnFileFilter filter = new AnFileFilter();
  596.             filter.add("cs");
  597.             filter.setDescription("*.cs");
  598.             JFileChooser jFileChooser = new JFileChooser((new File( "." )).getAbsolutePath());
  599.             jFileChooser.setDialogTitle("File Selector");
  600.             
  601.             jFileChooser.setFileFilter(filter);
  602.  
  603.             jFileChooser.setMultiSelectionEnabled(false);
  604.  
  605.             int ans = jFileChooser.showOpenDialog(null);
  606.  
  607.             if(ans ==JFileChooser.APPROVE_OPTION){
  608.                 String filename =jFileChooser.getSelectedFile().getAbsolutePath();
  609.                 
  610.                 try{
  611.                     // 2001.12.25 for ECELL2.2
  612.                     //df.setCellStateFile(filename);
  613.                     engine.setCellStateFile( filename );
  614.                 }catch(Exception ex){
  615.                     messageWindow.setErrorMessage( ex );
  616.                 }
  617.             }
  618.         }
  619.  
  620.  
  621.         if(e.getSource() == itemSaveState) {
  622.             AnFileFilter filter = new AnFileFilter();
  623.             filter.add("cs");
  624.             filter.setDescription("*.cs");
  625.             JFileChooser jFileChooser = new JFileChooser((new File( "." )).getAbsolutePath());
  626.             jFileChooser.setDialogTitle("File Selector");
  627.  
  628.             jFileChooser.setFileFilter(filter);
  629.  
  630.             jFileChooser.setMultiSelectionEnabled(false);
  631.  
  632.             boolean flag = true;
  633.             while( flag )
  634.             {
  635.                 int ans = jFileChooser.showSaveDialog(null);
  636.                 if(ans ==JFileChooser.APPROVE_OPTION){
  637.                 
  638.                     String filename =jFileChooser.getSelectedFile().getAbsolutePath().trim();
  639.                 
  640.                     // 2002.4 akira shiozawa
  641.                     if( !filename.endsWith( ".cs" ) )
  642.                     {
  643.                         filename += ".cs";
  644.                     }
  645.                     File csfile = new File( filename );
  646.                     if( csfile.exists() )
  647.                     {
  648.                         int opt = JOptionPane.showConfirmDialog( this.getContentPane(), 
  649.                                                        "overwrite " + filename + "?",
  650.                                                        "ECELL2",
  651.                                                        JOptionPane.YES_NO_OPTION );
  652.                         if( opt != JOptionPane.YES_OPTION )
  653.                         {
  654.                             continue;
  655.                         }
  656.                     }
  657.                 
  658.                     try{
  659.                         // 2001.12.25 for ECELL2.2
  660.                         //df.saveCellStateFile(filename);
  661.                         engine.saveCellStateFile( filename );
  662.                     }catch(Exception ex){
  663.                         messageWindow.setErrorMessage( ex );
  664.                     }
  665.                 }
  666.                 flag = false;
  667.             }
  668.         }
  669.  
  670.         
  671.         if(e.getSource() == itemSubstance) {
  672.             if(selectorFlag ==false){
  673.                 selector = new EntrySelector(1,this);
  674.                 selectorFlag = true;
  675.  
  676.                 selector.setVisible(true);
  677.                 //selector.setLocation(150,100);
  678.             }else{
  679.                 if(selector.isVisible()) {
  680.                     Object message ="Entry Selector is be using by other window";
  681.                     String title ="E-Cell Control Panel";
  682.                     int messageType = JOptionPane.INFORMATION_MESSAGE;
  683.                     JOptionPane.showMessageDialog(this,message,title,messageType);
  684.                     return;
  685.                 }
  686.                 selector.setEntrySelector(1);
  687.                 
  688.                 selector.setVisible(true);
  689.             }
  690.         }
  691.  
  692.         if(e.getSource() == itemReactor) {
  693.             if(selectorFlag ==false){
  694.                 selector = new EntrySelector(2,this);
  695.                 selectorFlag = true;
  696.                 selector.setVisible(true);
  697.                 //selector.setLocation(150,100);
  698.             }else{
  699.                 if(selector.isVisible()) {
  700.                     Object message ="Entry Selector is be using by other window";
  701.                     String title ="E-Cell Control Panel";
  702.                     int messageType = JOptionPane.INFORMATION_MESSAGE;
  703.                     JOptionPane.showMessageDialog(this,message,title,messageType);
  704.                     return;
  705.                 }
  706.                 selector.setEntrySelector(2);
  707.                 selector.setVisible(true);
  708.             }
  709.         }
  710.  
  711.  
  712.     }
  713.  
  714.  
  715.  
  716.     /**
  717.      * Start up Loop.
  718.      * @return void
  719.      **/
  720.     private void fireClicked()
  721.     {
  722.         Vector listenersClone = (Vector) listeners.clone();
  723.         AccessListener listener;
  724.         for( Enumeration e = listenersClone.elements(); e.hasMoreElements(); )
  725.         {
  726.             listener = (AccessListener) e.nextElement();
  727.             listener.accessJni( this );
  728.         }
  729.     }
  730.  
  731.     /**
  732.      * Adds a listener for clicks.
  733.      * @param listener      AccessListener
  734.      * @return void
  735.      */
  736.     public void addAccessListener( AccessListener listener )
  737.     {
  738.         listeners.addElement( listener );
  739.     }
  740.  
  741.     /**
  742.      * Removes a listener for clicks.
  743.      * @ param listener     AccessListener
  744.      * @return void
  745.      **/
  746.     public void removeAccessListener( AccessListener listener )
  747.     {
  748.         listeners.removeElement( listener );
  749.     }
  750.  
  751.     /**
  752.      * repaint all tracers.
  753.      * @return void
  754.      */
  755.     public void repaintAllTracers()
  756.     {
  757.         Vector tracers = (Vector)listeners.clone();
  758.         for( Enumeration enum = tracers.elements(); enum.hasMoreElements(); )
  759.         {
  760.             ECell2Interface interf = (ECell2Interface)enum.nextElement();
  761.             if( interf instanceof Tracer )
  762.             {
  763.                 ((Tracer)interf).grap.repaint();
  764.             }
  765.         }
  766.     }
  767.  
  768.   /**
  769.    * File exit
  770.    * @return void
  771.    */
  772.     public void fileExit_actionPerformed() {
  773.         Object confirmText ="Do you really want to exit ?";
  774.         String confirmTitle ="E-Cell Control Panel";
  775.         int optionType = JOptionPane.YES_NO_OPTION;
  776.         int messageType = JOptionPane.QUESTION_MESSAGE;
  777.         int selectedValue =JOptionPane.showConfirmDialog(this.getContentPane(),confirmText,
  778.                                                                         confirmTitle,optionType,messageType);
  779.         if(selectedValue==0){
  780.             // 2002.3.19 akira shiozawa
  781.             exitSystem();
  782.         }
  783.     }
  784.  
  785.     /**
  786.      * System exit
  787.      * @return void
  788.      **/
  789.     public void exitSystem()
  790.     {
  791.         if( coreThread != null )
  792.         {
  793.             this.stopAction();
  794.             
  795.             // 2002.4 akira shiozawa
  796.             while( bRunning )
  797.             {
  798.                 try
  799.                 {
  800.                     Thread.sleep( 50 );
  801.                 }
  802.                 catch( Exception e )
  803.                 {
  804.                     messageWindow.setErrorMessage( e );
  805.                 }
  806.             }
  807.         }
  808.         
  809.         // 2002.4 akira shiozawa
  810.         while( true )
  811.         {
  812.             Vector lsnrs = (Vector)listeners.clone();
  813.             for( Enumeration enum = lsnrs.elements(); enum.hasMoreElements(); )
  814.             {
  815.                 ECell2Interface interf = (ECell2Interface)enum.nextElement();
  816.                 if( interf.getRunningFlag() )
  817.                 {
  818.                     try
  819.                     {
  820.                         Thread.sleep( 50 );
  821.                     }
  822.                     catch( Exception e )
  823.                     {
  824.                         messageWindow.setErrorMessage( e );
  825.                     }
  826.                     break;
  827.                 }
  828.                 interf.exit_actionPerformed();
  829.             }
  830.             if( listeners.size() == 0 )
  831.             {
  832.                 break;
  833.             }
  834.         }
  835.         
  836.         // 2001.12.25 for ECELL2.2
  837.            //df.setMainWindowState(-1);
  838.            engine.setMainWindowState( -1 );
  839.            
  840.            System.exit(0);
  841.     }
  842.  
  843.     /**
  844.      * Help/version information
  845.      * @return void
  846.      */
  847.     public void helpAbout_actionPerformed()
  848.     {
  849.         JOptionPane.showMessageDialog( this.getContentPane(), 
  850.                                        Engine.msg_welcome,
  851.                                        "ECELL2",
  852.                                        JOptionPane.INFORMATION_MESSAGE );
  853.         
  854.         
  855.     }
  856.  
  857.     /**
  858.      * Override to exit when the window is closed.
  859.      * @param e     Event 
  860.      * @return void
  861.      */
  862.     protected void processWindowEvent(WindowEvent e) {
  863.         super.processWindowEvent(e);
  864.         if (e.getID() == WindowEvent.WINDOW_CLOSING) {
  865.             if( !bRunning )
  866.             {
  867.                 fileExit_actionPerformed();
  868.             }
  869.  
  870.         }
  871.     }
  872.  
  873.     /*
  874.      * Thread Start
  875.      * @return void
  876.      */
  877.     public void run() {
  878. engine.debugFunc( "-----> run@" + getClass().getName() );
  879.         // 2002.4 akira shiozawa
  880.         bRunning = true;
  881.         
  882.         Thread thisThread = Thread.currentThread();
  883.         while(coreThread==thisThread)
  884.         {
  885.             try {
  886.                 thisThread.sleep(50);
  887.  
  888.                 fireClicked();
  889.                 // 2001.12.25 for ECELL2.2
  890.                 //int ret = df.setMainWindowState(0);
  891.                 int ret = engine.setMainWindowState( 0 );
  892.                 
  893.                 double fTime = df.getTime();
  894.                 jlTime.setText("   "+ getDoubleValue(fTime));
  895.                 // 2001.10.22 stop running when setMainWindowState returns 0
  896.                 if( ret == 0 || this.getStopActionFlag() )
  897.                 {
  898.                     this.stopAction();
  899.                 }
  900.             }catch(Exception ex)
  901.             {
  902.                 messageWindow.setErrorMessage( ex );
  903.             }
  904.         }
  905.  
  906.         // 2002.4 akira shiozawa
  907.         if( engine.getScriptRunning() )
  908.         {
  909.             engine.loadScript( engine.getScriptName() );
  910.         }
  911.         
  912.         
  913.         // 2002.4 akira shiozawa
  914.         bRunning = false;
  915.         
  916. engine.debugFunc( "<----- run@" + getClass().getName() );
  917.     }
  918.  
  919.      /**
  920.      * Convert Double value to suitable String.
  921.      * @param vaule     Double data 
  922.      * @return     Converted String
  923.      */
  924.     public String getDoubleValue(double value){
  925.         int dotIndex=-1;
  926.         int eIndex=-1;
  927.  
  928.         String str=String.valueOf(value);
  929.         int len=str.length();
  930.         if(len<=8) return str;
  931.  
  932.  
  933.         dotIndex=str.indexOf(".");
  934.         eIndex=str.indexOf("E");
  935.         if(eIndex==-1){
  936.             if(dotIndex==-1){
  937.                 return str;
  938.             }else if(dotIndex==7){
  939.                 return str.substring(0,9);
  940.             }else if(dotIndex<7){
  941.                 return str.substring(0,8);
  942.             }else if(dotIndex>7){
  943.                 return str.substring(0,dotIndex);
  944.             }
  945.         }else if(eIndex<=7){
  946.             return str;
  947.         }else{
  948.             return (str.substring(0,7)+str.substring(eIndex,len)); 
  949.         }
  950.         return "";
  951.  
  952.     }
  953.  
  954.     /**
  955.      * Set stop action flag.
  956.      * @ param flag     boolean
  957.      * @return void
  958.      **/
  959.     public void setStopActionFlag( boolean flag )
  960.     {
  961.         bStopAction = flag;
  962.     }
  963.     
  964.     /**
  965.      * Get stop action flag.
  966.      * @return boolean
  967.      **/
  968.     public boolean getStopActionFlag()
  969.     {
  970.         return bStopAction;
  971.     }
  972.  
  973.     /**
  974.      * Set rule file flag.
  975.      * @ param flag     boolean
  976.      * @return void
  977.      **/
  978.     public void setRuleFlag( boolean flag )
  979.     {
  980. engine.debugFunc( "-----> setRuleFlag@" + getClass().getName() + "( flag:" + flag + " )" );
  981.         ruleFlag = flag;
  982.         // 2002.5
  983.         setRuleFileName();
  984. engine.debugFunc( "<----- setRuleFlag@" + getClass().getName() + "()" );
  985.     }
  986.  
  987.     //static String arg = "";
  988.     //boolean packFrame = false;
  989.     public static final String reactorPath = "./DLLR";
  990.     public static final String jniDLLName = "jni_source";
  991.     public static final String jniStaticDLLReactor = "jni_static";
  992.     public static final String propertyPath = "ecell2.properties";
  993.  
  994.     public static void loadReactorDlls( String rPath ) 
  995.     {
  996.         // 2002.1.9
  997.         ExtensionFilter filter = new ExtensionFilter( rPath, ".dll" );
  998.         String[] list = filter.list();
  999.         if( list != null )
  1000.         {
  1001.             StringBuffer dlls = new StringBuffer();
  1002.             boolean ret = true;
  1003.             for( int i = 0; i < list.length; i++ )
  1004.             {
  1005.                 //dlls.append( list[i].substring( 0, list[i].lastIndexOf( DllFilter.extension ) ) );
  1006.                 dlls.append( list[i] );
  1007.                 dlls.append( "," );
  1008.             }
  1009.             ret = DataField.loadReactorDlls( list.length, dlls.toString() );
  1010.             if( !ret )
  1011.             {
  1012.                 System.out.println( "Reactor DLL load failed." );
  1013.                 System.exit( 1 );
  1014.             }
  1015.         }
  1016.     }
  1017.  
  1018.     /**
  1019.      *Main method
  1020.      */
  1021.     public static void main(String[] args) {
  1022.  
  1023.         //MainWindow.loadReactorDlls();
  1024.  
  1025.         try {
  1026.             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  1027.         }
  1028.         catch(Exception e) {
  1029.             e.printStackTrace();
  1030.         }
  1031.  
  1032.         // 2001.12.25 for ECELL2.2
  1033.         //new MainWindows();
  1034.         //new MainWindows( args );
  1035.         MainWindow frame = new MainWindow();
  1036.          frame.initClass();
  1037.  
  1038. /**
  1039.         if (frame.packFrame)
  1040.         {
  1041.             frame.pack();
  1042.         }
  1043.         else
  1044. **/
  1045.         {
  1046.             frame.validate();
  1047.         }
  1048.         frame.setVisible(true);
  1049.         frame.setLocation(150,200);
  1050.         
  1051.         // 2002.1.16
  1052.         TracerDataManager.clearTempDir();
  1053.         
  1054.         // 2001.12.25 for ECELL2.2
  1055.         //int ret=0;
  1056.         boolean ret = false;
  1057.         
  1058.         // 2001.12.25 for ECELL2.2
  1059.         //ret=frame.df.setMainWindowsArg(arg);
  1060.         ret = frame.engine.setMainWindowsArg( args );
  1061.  
  1062.         frame.ruleFlag=ret;
  1063.         if(!ret){
  1064.             frame.setState1();
  1065.         }
  1066.         
  1067.     }
  1068.  
  1069.  
  1070.     static
  1071.     {
  1072.         System.loadLibrary( MainWindow.jniDLLName );
  1073.     }
  1074.  
  1075. }
  1076.